<?php
/**
 * Api接口信息处理类
 * @author wangXi <iwisunny@gmail.com>
 * Date: 2015/12/1 14:47
 */
namespace UserSystem;

class ApiMsg
{
    const LOGIN_OK='0100';
    const PWD_ERROR='0101';
    const USER_NOT_EXIST='0102';
    const ACCESS_TOKEN_ERROR='0103';

    const REGISTER_OK='0200';
    const REGISTER_FAILED='0201';

    const BAD_REQUEST='0400';
    const INVALID_USER_NAME='0401';
    const INVALID_USER_PASS='0402';
    const INVALID_PLATFORM='0403';
    const USER_ALREADY_EXIST='0404';

    /**
     * 状态码说明表
     * @var array
     */
    protected $statusCodeMap=array(
        '0100'=>'登录成功',
        '0101'=>'密码错误',
        '0102'=>'用户不存在',
        '0103'=>'access token错误',

        '0200'=>'注册成功',
        '02001'=>'注册失败',

        '0400'=>'非法请求，系统已拒绝',
        '0401'=>'用户名格式错误',
        '0402'=>'密码格式错误',
        '0403'=>'非法平台，系统已拒绝',
        '0404'=>'用户已存在',
    );

    /**
     * 接口返回信息
     * @var array
     */
    protected $msg=array(
        'info'    => '',
        'result'  => array(),
        'code'    => '',
        'success' => false
    );

    /**
     * @param null $key
     * @return array|null
     */
    public function get($key=null){
        if (isset($key)) {
            if (array_key_exists($key, $this->msg)) {
                return $this->msg[$key];
            }
            else {
                return null;
            }
        }
        else {
            return $this->msg;
        }
    }

    /**
     * @return array
     */
    public function set(){
        $args = func_get_args();
        $args=array_slice($args, 0,2);

        if(count($args)==1){
            $args=$args[0];

            if(is_string($args)){
                if(strpos($args, '0')===0){
                    $this->msg['code']=$args;
                    $this->msg['info']=$this->statusCodeMap[$args];
                }
            }

            if(is_array($args) && !empty($args)){
                foreach ($args as $key => $val) {
                    if (array_key_exists($key, $this->msg)) {
                        $this->msg[$key] = $val;
                    }
                }
            }

        }
        else if (count($args) == 2 && is_string($args[0])) {
            if (array_key_exists($args[0], $this->msg)) {
                $this->msg[$args[0]] = $args[1];
            }
        }

        return $this;
    }

    /**
     * 接口返回json
     */
    public function output(){
        header('Content-Type:application/json; charset=utf-8');
        exit(json_encode($this->msg));
    }
}